package br.ufrn.execicios.servlets;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/livroDeVisitas")
public class LivroDeVisitas extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 4839309864555822506L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {

		ImprimePagina(resp, GeraFormularioEntrada(null));

	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		String lista = req.getParameter("resultSet");
		String nome = req.getParameter("nome");
		String comentario = req.getParameter("comentario");
		ImprimePagina(resp, GeraListaVisitas(lista, nome, comentario));

	}

	private String GeraListaVisitas(String lista, String nome, String comentario) {
			
		StringBuilder resultado = new StringBuilder();

		if (nome != null && !nome.equals("") ) {
			if (lista != null)
				lista += lista + String.format(";%s-%s", nome, comentario);
			else
				lista = String.format("%s-%s", nome, comentario);
		} else {
			resultado.append("<h2> Registro inválido. Tente novamente </h2><br/>");
		}
		
		resultado.append(GeraFormularioEntrada(lista));

		String formato1 = "<div> " + 
		                 "<h2> %s </h2><br/>" +
				         "<p> %s </p>"+
				         "</div>";
		String formato2 = "<div> " + 
                "<h2> %s </h2><br/>" +
		         "</div>";

		String[] visitas = lista.split(";");

		for (int i = 0; i < visitas.length; i++) {
			String[] visita = visitas[i].split("-");
			if(visita.length>1)
				resultado.append(String.format(formato1, visita[0], visita[1]));
			else
				resultado.append(String.format(formato2, visita[0]));
				
		}

		return resultado.toString();
	}

	private String GeraFormularioEntrada(String lista) {

		StringBuilder form = new StringBuilder();
		form.append("<form method='post'>");
		form.append(System.lineSeparator());
		form.append("Digite o seu nome:&nbsp;<input type='text' name='nome' /><br/>");
		form.append("Comentário:&nbsp;<input type='text' name='comentario' /><br/>");
		if (lista != null)
			form.append(String.format(
					"<input type='hidden' value='%s' name='resultSet' />",
					lista));

		form.append(" <input type='submit' value='Inserir'>");
		form.append(System.lineSeparator());
		form.append("</form>");
		return form.toString();
	}

	private void ImprimePagina(HttpServletResponse resp, String conteudo) {
		PrintWriter out;
		try {
			out = resp.getWriter();
			resp.setContentType("text/html");
			out.println("<html><body>");
			out.println("<h1>Exe02-Lista de visitas</h1><br/>");
			out.println(conteudo);
			out.println("</body></html>");
			out.close();

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}
